/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.apolo.testes;

import java.util.List;

import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;

import com.apolo.controle.Fachada;
import com.apolo.entidades.Pessoa;

/**
 *
 * @author armando
 */
public class TestCaseFachada {
    private Fachada f; 
    Pessoa p1, p2, p3; 
    
    public TestCaseFachada() {
    }
    
    /**
     * Faz a inicializacao do Teste, antes de rodar cada TestCase 
     */
    @Before
    public void setUp() {
        f = new Fachada();
        
        //cria 3 pessoas 
       
        p1 = new Pessoa("Chavier", "c@gmail.com", "Rua A","H");
        p2 = new Pessoa("Joao da Silva Chavier", "jsc@gmail.com", "Rua A","H");
        p3 = new Pessoa("Maria Joaquina Cavalcante", "mjc@gmail.com", "Rua A","M");
        
        //insere as pessoas no repositorio de lista de pessoas
        f.inserirPessoa(p1);
        f.inserirPessoa(p2);
        f.inserirPessoa(p3);     
    }
    
    /**
     * Faz o teste de inserir uma Pessoa
     * Passos: 
     * 1 - Dada uma Pessoa
     * 2 - Checar se a Pessoa foi inserida no Repositorio com os dados passados
     */
    @Test
    public void TestCaseInserePessoa(){
        Pessoa p4 = new Pessoa("Jose de Andrade Lima", "jal@gmail.com", "Rua C","H");
        p4.setFone("000");
        
        try{
            f.inserirPessoa(p4);
        }catch (Exception e){
            System.out.print(e.getMessage());
            fail();
        }
    }
    
    /**
     * Faz um teste para checar se o metodo ProcurarPessoa da Fachada esta funcionando corretamente
     * Passos:
     * 1 - Dado um nome da Pessoa
     * 2 - Dada a Posicao da Pessoa
     * 3 - Checa se e o mesmo nome da Pessoa da Posicao testada
     */
    @Test
    public void TestCasePesquisaPessoa(){
        //pesquisa a 3o. pessoa do repositorio
        String nome="Maria Joaquina Cavalcante"; 
        String nomeTeste="";
        Pessoa p;
        p = f.procurarPessoa(2);
        nomeTeste = p.getNome();
        if (nome.equals(nomeTeste)){
            assertTrue(true);
        }else{
            fail();
        }
    }
    
  
    /**
     * Faz o teste para checar se o metodo removerPessoa da classe Fachada esta funcionando corretamente
     * Passos:
     * 1 - Dado um indice da Pessoa
     * 2 - Checa se a pessoa do indice correspondente foi removida do repositorio 
     */
    @Test
    public void TestCaseRemoverPessoa(){
    	//Remover a pessoa de indice 1, no caso o Joao da Silva Chavier
    	try{
    		f.removerPessoa(1);
    	}catch (Exception e){
    		System.out.println(e.getMessage());
    		fail();
    	}
    }
    
    /**
     * Faz o Teste se a quantidade de pessoas do repositorio de Pessoas esta correto
     * Passos: 
     * 1 - Sao inseridas 3 pessoas em um repositorio Vazio
     * 2 - Deve retornar a quantidade 3 
     */
    @Test
    public void TestCaseChecaQuantidadePessoasLista(){
    	//de acordo com o setup do teste, foram inseridas 3 pessoas, entao a qtd de pessoas na lista deve ser 3
    	int qtd=0;
    	qtd = f.quantidadePessoas();
    	if (qtd==3){
    		assertTrue(true);
    	}else{
    		fail();
    	}
    	
    }
    
    /**
     * Faz o teste de procurar Pessoa em um repositorio
     * Passos: 
     * 1 - Dado um indice da Pessoa no repositorio
     * 2 - Checar se a Pessoa correpondente e retornada
     */
    @Test 
    public void TestBuscaPessoa(){
    	Pessoa p;
    	int indice=2;
    	String nomeTeste="";
    	//de acordo com o setup do teste, a Pessoa de indice 2 deve ser a Pessoa de nome Maria Joaquina Cavalcante
    	
    	p = f.procurarPessoa(indice);
    	nomeTeste = "Maria Joaquina Cavalcante";
    	if (p.getNome().equals(nomeTeste)){
    		assertTrue(true);
    	}else{    	
    		fail();
    	}
    }
    
    /**
     * Faz o teste de edicao dos dados de uma Pessoa
     * Passos:
     * 1 - Dada uma Pessoa com os dados originais
     * 2 - Alterar os dados para outras informacoes
     * 3 - Checar se os dados alterados foram persistidos
     */
    @Test
    public void TestEditaPessoa(){
    	Pessoa p, pAux;
    	String email="";
    	
    	p = new Pessoa("Armando Soares Sousa", "armando@ufpi.edu.br", "Rua A","H");
    	p.setCodigo(0); //referente ao indice da pessoa Armando.
    	
    	f.atualizaPessoa(p);
    	
    	//verifica se o e-mail do armando foi atualizado para armando@ufpi.edu.br
    	pAux = f.pegaPosicaoPessoa(0);
    	email = "armando@ufpi.edu.br";
    	if (pAux.getEmail().equals(email)){
    		assertTrue(true);
    	}else{
    		fail();
    	}
    }
    
    /**
     * Checa se as Pessoas inseridas no Setup do TestCase estao realmente inseridas na Lista de Pessoas
     */
    @Test
    public void TestCaseListaPessoas(){
    	List<Pessoa> listaPessoasAux;
    	try{
    		listaPessoasAux = f.listaPessoas();
    		if (listaPessoasAux.size() == 3){
    			assertTrue(true);
    		}else{
    			fail();
    		}
    	}catch(Exception e){
    		System.out.println(e.getMessage());
    		fail();    		
    	}
    }

}
